package com.weather.data.result;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * @author HanYiMing
 * @date 2023/2/10
 * @desciption 统一返回类
 */
@Data
public class Result {

    /**
     * 状态码 来自枚举类ResponseType
     */
    private Integer code;

    /**
     * 消息  来自枚举类ResponseType
     */
    private String mes;

    /**
     * 数据体
     */
    private Map<String, Object> responseData = new HashMap<>();

    private Result() {
        // TODO Auto-generated constructor stub
    }

    private Result(Integer code, String mes) {
        super();
        this.code = code;
        this.mes = mes;
    }

    /**
     * 接口失败方法
     *
     * @param code    状态码
     * @param message 返回信息
     * @return 访问接口500报错
     */
    public static Result failure(int code, String message) {
        Result result = new Result();
        result.setCode(code);
        result.setMes(message);
        return result;
    }

    /**
     * 添加返回体
     *
     * @param key  键
     * @param data 值
     * @return 返回体
     */
    public Result addBody(String key, Object data) {
        this.responseData.put(key, data);
        return this;
    }

    /**
     * 保存成功
     *
     * @return 保存成功
     */
    public static Result saveSuccess() {
        return success().addBody("result", "保存成功");
    }

    /**
     * 保存失败
     *
     * @return 保存失败
     */
    public static Result saveFail() {
        return fail().addBody("result", "保存失败");
    }

    /**
     * 修改成功
     *
     * @return 修改成功
     */
    public static Result editSuccess() {
        return success().addBody("result", "修改成功");
    }

    /**
     * 修改失败
     *
     * @return 修改失败
     */
    public static Result editFail() {
        return fail().addBody("result", "修改失败");
    }

    /**
     * 删除成功
     *
     * @return 删除成功
     */
    public static Result removeSuccess() {
        return success().addBody("result", "删除成功");
    }

    /**
     * 删除失败
     *
     * @return 删除失败
     */
    public static Result removeFail() {
        return fail().addBody("result", "删除失败");
    }

    /**
     * 接口请求成功
     *
     * @return 状态码200
     */
    public static Result success() {
        return new Result(ResponseType.SUCCESS.getCode(), ResponseType.SUCCESS.getMes());

    }

    /**
     * 接口请求失败
     *
     * @return 状态码500
     */
    public static Result fail() {
        return new Result(ResponseType.FAIL.getCode(), ResponseType.FAIL.getMes());

    }

    /**
     * 账号或密码错误
     *
     * @return 账号或密码错误
     */
    public static Result accountError() {
        return new Result(ResponseType.ACCOUNT_ERROR.getCode(), ResponseType.ACCOUNT_ERROR.getMes());

    }

    /**
     * 账号不存在
     *
     * @return 账号不存在
     */
    public static Result accountUnknown() {
        return new Result(ResponseType.ACCOUNT_UNKNOWN.getCode(), ResponseType.ACCOUNT_UNKNOWN.getMes());

    }

    /**
     * token过期
     *
     * @return token过期
     */
    public static Result tokenExpire() {
        return new Result(ResponseType.TOKEN_EXPIRE.getCode(), ResponseType.TOKEN_EXPIRE.getMes());

    }

    /**
     * 警告
     *
     * @return 警告
     */
    public static Result warning() {
        return new Result(ResponseType.WARNING.getCode(), ResponseType.WARNING.getMes());
    }

    /**
     * 未登录
     *
     * @return 未登录
     */
    public static Result notLogin() {
        return new Result(ResponseType.NOT_LOGIN.getCode(), ResponseType.NOT_LOGIN.getMes());
    }

    /**
     * 权限不足
     *
     * @return 权限不足
     */
    public static Result permissionDenied() {
        return new Result(ResponseType.PERMISSION_DENIED.getCode(), ResponseType.PERMISSION_DENIED.getMes());
    }

    /**
     * 账号已存在
     *
     * @return 账号已存在
     */
    public static Result accountExist() {
        return new Result(ResponseType.ACCOUNT_EXIST.getCode(), ResponseType.ACCOUNT_EXIST.getMes());
    }

    /**
     * 新密码不能与旧密码一致
     *
     * @return 新密码不能与旧密码一致
     */
    public static Result passwordTheSame() {
        return new Result(ResponseType.PASSWORD_THE_SAME.getCode(), ResponseType.PASSWORD_THE_SAME.getMes());
    }

    /**
     * 重名
     *
     * @return 重名
     */
    public static Result rename() {
        return new Result(ResponseType.RENAME.getCode(), ResponseType.RENAME.getMes());
    }
}
